const cloud = require("wx-server-sdk");

cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV,
});

const db = cloud.database();

/**
 * 获取音频列表（带分页功能）
 * @param {Object} event - 事件参数
 * @param {number} event.page - 页码，从1开始，默认为1
 * @param {number} event.pageSize - 每页数量，默认为10，最大50
 * @param {string} event.orderBy - 排序字段，默认为创建时间
 * @param {string} event.order - 排序方式，asc或desc，默认desc
 * @returns {Object} 返回音频列表和分页信息
 */
const fetchAudioList = async (event) => {
  try {
    // 参数校验和默认值设置
    const page = Math.max(1, parseInt(event.page) || 1);
    const pageSize = Math.min(50, Math.max(1, parseInt(event.pageSize) || 10));
    const orderBy = event.orderBy || '_createTime';
    const order = event.order === 'asc' ? 'asc' : 'desc';
    
    // 计算跳过的记录数
    const skip = (page - 1) * pageSize;
    
    // 构建查询条件
    let query = db.collection('audioList');
    
    // 如果有其他筛选条件，可以在这里添加
    // 例如：按分类筛选
    if (event.category) {
      query = query.where({
        category: event.category
      });
    }
    
    // 如果有搜索关键词
    if (event.keyword) {
      query = query.where({
        title: db.RegExp({
          regexp: event.keyword,
          options: 'i' // 不区分大小写
        })
      });
    }
    
    // 获取总数（用于计算分页信息）
    const countResult = await query.count();
    const total = countResult.total;
    
    // 获取当前页数据
    const listResult = await query
      .orderBy(orderBy, order)
      .skip(skip)
      .limit(pageSize)
      .get();
    
    // 计算分页信息
    const totalPages = Math.ceil(total / pageSize);
    const hasMore = page < totalPages;
    
    return {
      success: true,
      data: {
        list: listResult.data,
        pagination: {
          page: page,
          pageSize: pageSize,
          total: total,
          totalPages: totalPages,
          hasMore: hasMore
        }
      }
    };
    
  } catch (error) {
    console.error('获取音频列表失败:', error);
    return {
      success: false,
      errMsg: error.message || '获取音频列表失败',
      errCode: error.errCode || -1
    };
  }
};

/**
 * 获取音频详情
 * @param {Object} event - 事件参数
 * @param {string} event.audioId - 音频ID
 * @returns {Object} 返回音频详情
 */
const getAudioDetail = async (event) => {
  try {
    if (!event.audioId) {
      return {
        success: false,
        errMsg: '音频ID不能为空'
      };
    }
    
    const result = await db.collection('audioList')
      .doc(event.audioId)
      .get();
    
    return {
      success: true,
      data: result.data
    };
    
  } catch (error) {
    console.error('获取音频详情失败:', error);
    return {
      success: false,
      errMsg: error.message || '获取音频详情失败',
      errCode: error.errCode || -1
    };
  }
};

// 云函数入口函数
exports.main = async (event, context) => {
  // 获取用户openid（可选，用于权限控制）
  const wxContext = cloud.getWXContext();
  
  switch (event.type) {
    case 'getAudioList':
      return await fetchAudioList(event);
    case 'getAudioDetail':
      return await getAudioDetail(event);
    default:
      return {
        success: false,
        errMsg: '不支持的操作类型'
      };
  }
};
